package com.jt.controller;/**
 * @Author 金帮嘉诚 @Date 2021-07-29 星期四 14:12
 */

/*本类用于测试*/

import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * 知识点
 */

@RestController
//协议、域名、端口号
//(origins = "http://127.0.0.1:8848")//这里要用8848端口才可以访问，不能8090
@CrossOrigin(origins = "http://127.0.0.1:8848")
@RequestMapping("/")
public class UserController {
    @Autowired
    private UserService userService;

    /*三个小案例*/

    /**
     * url:http://127.0.0.1:8090/getUserById?id=1
     * type:GET
     */
    @GetMapping("getUserById")
    public String getUserById(Integer id) {
        return "null:" + id;
    }

    /**
     * url:http://127.0.0.1:8090/getUser
     * http://127.0.0.1:8090/getUser?id=1&name=name&age=18&sex=%E7%94%B7
     */
    @GetMapping("getUser")
    public User getUser(User user) {
        return user;
    }

    /**
     * url:http://127.0.0.1:8090/getUser1/1
     * restFul风格
     * <p>
     * 1.url简单 参数使用/分割
     * 2.参数个数固定
     * 3.路径不能出现动词
     * <p>
     * 用户可以通过一个url实现不同操作
     * <p>
     * restFul规定 用不同的请求类型 区分业务 而不是url路径,因此无法通过url区分业务类型
     * 具体对应关系为:
     * 业务类型:请求类型
     * 查询:get
     * 新增:post
     * 删除:delete
     * 更新:put
     */

    @GetMapping("getUser1/{x}/{y}")
    public User getUser1(@PathVariable Integer x, @PathVariable String y) {
        User user = new User();
        user.setId(x).setName(y);
        return user;
    }
    /*restFul 简单使用*/

    /**
     * url:http://localhost:8090/user/100
     * type:GET
     * RequestMapping 默认的可以接收所有的请求类型
     * <p>
     * RestFul语法:
     * 1.参数位置固定
     * 2.参数必须使用{}包裹
     * 3.必须使用@PathVariable 动态接受参数
     * <p>
     * 注意事项:{参数名称}必须与方法中名称一致
     * //注:还有需要相等的是 pojo中的属性和表的字段名
     */
    //@GetMapping(...) 等价于以下一句
    //@RequestMapping(value = "/user",method = RequestMethod.GET)
    @GetMapping("user/{id}")
    public String restFulGet(@PathVariable Integer id) {
        return "????:" + id;
    }

    /*restFul 对象接收*/

    /**
     * 需求:多个参数
     * 要求:使用restFul风格
     * url:http://localhost:8090/user/tomcat/18/女
     * RestFul优化:
     * 如果{参数名称}和对象中的属性名一致
     * ,SpringMVC会动态为对象赋值
     * ,@PathVariable 可以省略
     * 注意事项:
     * 前后端参数的传递个数必须要保持一致!!!
     */
    @GetMapping("user/{name}/{age}/{sex}")
    public User a(User user) {
        return user;
    }


    @GetMapping("getAll")
    public List<User> getAll() {
        return userService.getAll();
    }

    @DeleteMapping("delete")
    public int delete(Integer id) {
        return userService.delete(id);
    }

    @PutMapping("update")
    public int update(User user) {
        return userService.update(user);
    }

    @PostMapping("add")
    public int add(@RequestBody User user) {
        return userService.add(user);
    }

}
